﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ColorGame
{
    public partial class ColorSelector : UserControl
    {
         private int x = 0;
        private int y = 0;
        private int w = 50;
        private int h = 40;
        private int per = 6;
        List<Color> colors = new List<Color>();
        public delegate void ColorChangedHandler(Color color, EventArgs e);
        public event ColorChangedHandler ColorChanged;

        public ColorSelector()
        {
            InitializeComponent();
            InitColors();
            InitColorSelector();
        }
        public void InitColors()
        {
            colors.Clear();

            colors.Add(ColorTranslator.FromHtml("#FFC0CB"));
            colors.Add(ColorTranslator.FromHtml("#DC143C"));
            colors.Add(ColorTranslator.FromHtml("#FFF0F5"));
            colors.Add(ColorTranslator.FromHtml("#DB7093"));
            colors.Add(ColorTranslator.FromHtml("#FF69B4"));
            colors.Add(ColorTranslator.FromHtml("#FF1493"));
            colors.Add(ColorTranslator.FromHtml("#C71585"));
            colors.Add(ColorTranslator.FromHtml("#DA70D6"));
            colors.Add(ColorTranslator.FromHtml("#D8BFD8"));
            colors.Add(ColorTranslator.FromHtml("#DDA0DD"));
            colors.Add(ColorTranslator.FromHtml("#EE82EE"));
            colors.Add(ColorTranslator.FromHtml("#FF00FF"));
            colors.Add(ColorTranslator.FromHtml("#FF00FF"));
            colors.Add(ColorTranslator.FromHtml("#8B008B"));
            colors.Add(ColorTranslator.FromHtml("#800080"));
            colors.Add(ColorTranslator.FromHtml("#BA55D3"));
            colors.Add(ColorTranslator.FromHtml("#9400D3"));
            colors.Add(ColorTranslator.FromHtml("#9932CC"));
            colors.Add(ColorTranslator.FromHtml("#4B0082"));
            colors.Add(ColorTranslator.FromHtml("#8A2BE2"));
            colors.Add(ColorTranslator.FromHtml("#9370DB"));
            colors.Add(ColorTranslator.FromHtml("#7B68EE"));
            colors.Add(ColorTranslator.FromHtml("#6A5ACD"));
            colors.Add(ColorTranslator.FromHtml("#483D8B"));
            colors.Add(ColorTranslator.FromHtml("#E6E6FA"));
            colors.Add(ColorTranslator.FromHtml("#F8F8FF"));
            colors.Add(ColorTranslator.FromHtml("#0000FF"));
            colors.Add(ColorTranslator.FromHtml("#0000CD"));
            colors.Add(ColorTranslator.FromHtml("#191970"));
            colors.Add(ColorTranslator.FromHtml("#00008B"));
            colors.Add(ColorTranslator.FromHtml("#000080"));
            colors.Add(ColorTranslator.FromHtml("#4169E1"));
            colors.Add(ColorTranslator.FromHtml("#6495ED"));
            colors.Add(ColorTranslator.FromHtml("#B0C4DE"));
            colors.Add(ColorTranslator.FromHtml("#778899"));
            colors.Add(ColorTranslator.FromHtml("#708090"));
            colors.Add(ColorTranslator.FromHtml("#1E90FF"));
            colors.Add(ColorTranslator.FromHtml("#F0F8FF"));
            colors.Add(ColorTranslator.FromHtml("#4682B4"));
            colors.Add(ColorTranslator.FromHtml("#87CEFA"));
            colors.Add(ColorTranslator.FromHtml("#87CEEB"));
            colors.Add(ColorTranslator.FromHtml("#00BFFF"));
            colors.Add(ColorTranslator.FromHtml("#ADD8E6"));
            colors.Add(ColorTranslator.FromHtml("#B0E0E6"));
            colors.Add(ColorTranslator.FromHtml("#5F9EA0"));
            colors.Add(ColorTranslator.FromHtml("#F0FFFF"));
            colors.Add(ColorTranslator.FromHtml("#E1FFFF"));
            colors.Add(ColorTranslator.FromHtml("#AFEEEE"));
            colors.Add(ColorTranslator.FromHtml("#00FFFF"));
            colors.Add(ColorTranslator.FromHtml("#D4F2E7"));
            colors.Add(ColorTranslator.FromHtml("#00CED1"));
            colors.Add(ColorTranslator.FromHtml("#2F4F4F"));
            colors.Add(ColorTranslator.FromHtml("#008B8B"));
            colors.Add(ColorTranslator.FromHtml("#008080"));
            colors.Add(ColorTranslator.FromHtml("#48D1CC"));
            colors.Add(ColorTranslator.FromHtml("#20B2AA"));
            colors.Add(ColorTranslator.FromHtml("#40E0D0"));
            colors.Add(ColorTranslator.FromHtml("#7FFFAA"));
            colors.Add(ColorTranslator.FromHtml("#00FA9A"));
            colors.Add(ColorTranslator.FromHtml("#00FF7F"));
            colors.Add(ColorTranslator.FromHtml("#F5FFFA"));
            colors.Add(ColorTranslator.FromHtml("#3CB371"));
            colors.Add(ColorTranslator.FromHtml("#2E8B57"));
            colors.Add(ColorTranslator.FromHtml("#F0FFF0"));
            colors.Add(ColorTranslator.FromHtml("#90EE90"));
            colors.Add(ColorTranslator.FromHtml("#98FB98"));
            colors.Add(ColorTranslator.FromHtml("#8FBC8F"));
            colors.Add(ColorTranslator.FromHtml("#32CD32"));
            colors.Add(ColorTranslator.FromHtml("#00FF00"));
            colors.Add(ColorTranslator.FromHtml("#228B22"));
            colors.Add(ColorTranslator.FromHtml("#008000"));
            colors.Add(ColorTranslator.FromHtml("#006400"));
            colors.Add(ColorTranslator.FromHtml("#7FFF00"));
            colors.Add(ColorTranslator.FromHtml("#7CFC00"));
            colors.Add(ColorTranslator.FromHtml("#ADFF2F"));
            colors.Add(ColorTranslator.FromHtml("#556B2F"));
            colors.Add(ColorTranslator.FromHtml("#F5F5DC"));
            colors.Add(ColorTranslator.FromHtml("#FAFAD2"));
            colors.Add(ColorTranslator.FromHtml("#FFFFF0"));
            colors.Add(ColorTranslator.FromHtml("#FFFFE0"));
            colors.Add(ColorTranslator.FromHtml("#FFFF00"));
            colors.Add(ColorTranslator.FromHtml("#808000"));
            colors.Add(ColorTranslator.FromHtml("#BDB76B"));
            colors.Add(ColorTranslator.FromHtml("#FFFACD"));
            colors.Add(ColorTranslator.FromHtml("#EEE8AA"));
            colors.Add(ColorTranslator.FromHtml("#F0E68C"));
            colors.Add(ColorTranslator.FromHtml("#FFD700"));
            colors.Add(ColorTranslator.FromHtml("#FFF8DC"));
            colors.Add(ColorTranslator.FromHtml("#DAA520"));
            colors.Add(ColorTranslator.FromHtml("#FFFAF0"));
            colors.Add(ColorTranslator.FromHtml("#FDF5E6"));
            colors.Add(ColorTranslator.FromHtml("#F5DEB3"));
            colors.Add(ColorTranslator.FromHtml("#FFE4B5"));
            colors.Add(ColorTranslator.FromHtml("#FFA500"));
            colors.Add(ColorTranslator.FromHtml("#FFEFD5"));
            colors.Add(ColorTranslator.FromHtml("#FFEBCD"));
            colors.Add(ColorTranslator.FromHtml("#FFDEAD"));
            colors.Add(ColorTranslator.FromHtml("#FAEBD7"));
            colors.Add(ColorTranslator.FromHtml("#D2B48C"));
            colors.Add(ColorTranslator.FromHtml("#DEB887"));
            colors.Add(ColorTranslator.FromHtml("#FFE4C4"));
            colors.Add(ColorTranslator.FromHtml("#FF8C00"));
            colors.Add(ColorTranslator.FromHtml("#FAF0E6"));
            colors.Add(ColorTranslator.FromHtml("#CD853F"));
            colors.Add(ColorTranslator.FromHtml("#FFDAB9"));
            colors.Add(ColorTranslator.FromHtml("#F4A460"));
            colors.Add(ColorTranslator.FromHtml("#D2691E"));
            colors.Add(ColorTranslator.FromHtml("#8B4513"));
            colors.Add(ColorTranslator.FromHtml("#FFF5EE"));
            colors.Add(ColorTranslator.FromHtml("#A0522D"));
            colors.Add(ColorTranslator.FromHtml("#FFA07A"));
            colors.Add(ColorTranslator.FromHtml("#FF7F50"));
            colors.Add(ColorTranslator.FromHtml("#FF4500"));
            colors.Add(ColorTranslator.FromHtml("#E9967A"));
            colors.Add(ColorTranslator.FromHtml("#FF6347"));
            colors.Add(ColorTranslator.FromHtml("#FFE4E1"));
            colors.Add(ColorTranslator.FromHtml("#FA8072"));
            colors.Add(ColorTranslator.FromHtml("#FFFAFA"));
            colors.Add(ColorTranslator.FromHtml("#F08080"));
            colors.Add(ColorTranslator.FromHtml("#BC8F8F"));
            colors.Add(ColorTranslator.FromHtml("#CD5C5C"));
            colors.Add(ColorTranslator.FromHtml("#FF0000"));
            colors.Add(ColorTranslator.FromHtml("#A52A2A"));
            colors.Add(ColorTranslator.FromHtml("#B22222"));
            colors.Add(ColorTranslator.FromHtml("#8B0000"));
            colors.Add(ColorTranslator.FromHtml("#800000"));
            colors.Add(ColorTranslator.FromHtml("#FFFFFF"));
            colors.Add(ColorTranslator.FromHtml("#F5F5F5"));
            colors.Add(ColorTranslator.FromHtml("#DCDCDC"));
            colors.Add(ColorTranslator.FromHtml("#D3D3D3"));
            colors.Add(ColorTranslator.FromHtml("#C0C0C0"));
            colors.Add(ColorTranslator.FromHtml("#A9A9A9"));
            colors.Add(ColorTranslator.FromHtml("#808080"));
            colors.Add(ColorTranslator.FromHtml("#696969"));
            colors.Add(ColorTranslator.FromHtml("#000000"));









        }
        public void InitColorSelector()
        {
            this.Controls.Clear();
            if (colors.Count == 0) return;

            for (int i = 0; i < colors.Count; i++)
            {
                Panel panel = new Panel();
                panel.MouseUp += Panel_MouseUp;
                panel.Width = w;
                panel.Height = h;
                panel.BackColor = colors[i];
                panel.BorderStyle = BorderStyle.Fixed3D;
                x = (i % per) *w;
                y = (i / per) *h;
                panel.Location = new Point(x, y);
                panel.Cursor = Cursors.Hand;

                this.Controls.Add(panel);
            }
        }
        private void Panel_MouseUp(object sender, MouseEventArgs e)
        {
            Color color = ((Panel)sender).BackColor;
            ColorChanged?.Invoke(color, e);
        }
    }
}
